package Bk.basic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class J18_JDBCSetup {

	// JDBC 접속 정보
	private static final String DRV = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@//localhost:1521/xe";
	private static final String USR = "scott";
	private static final String PWD = "TIGER";
	
	// SQL 문 작성
	private static final String insertSQL =
		"insert into sungjuk (sjno,name,kor,eng,mat) VALUES(sjno.nextval, '동길', 54,54,99)";
	private static final String selectSQL = "select * from sungjuk " + " order by sjno desc"; // select 문장 사용시 "전후로 띄어쓰기 사용
	
	
	
	public static void main(String[] args) {
		// 오라클을 이용한 JDBC 프로그래밍 기초
		// 1. JDBC 드라이버를 메모리에 적재
		// 객체로 생성하고 이것을 DriverManager 에 등록
		// 2. DriverManager의 getConnection 메서드를
		// 이용해서 데이터베이스 연결객체를 생성함
		// 3. PreparedStatement 로 실행할 SQL문 객체를 생성
		// 4. 실행하는 SQL 문이 insert, update, delete 라면
		// 	executeUpdate()를 사용하고
		//	실행결과는 int 로 받음
		
		// 4. 실행하는 SQL 문이 select 라면
		// 	executeQuery()를 사용하고
		//	실행결과는 ResultSet으로 받음
		
		// 5. ResultSet 으로 받은 결과 테이블은
		//	먼저 rs.next()로 읽어올 레코드(행)를 가리킨 후
		//	rs.getxxx( 필드번호 ) 또는
		//	rs.getxxx( 필드이름 ) 으로
		//	테이블의 각 필드 값을 처리할 수 있음
		
		// 6. JDBC 작업이 끝나면
		//	연결중인 데이터베이스 접속을 끊고 
		//	관련객체 (conn,ps,rs)는
		//	메모리에서 제거함
		
		// **필수**
	Connection conn = null;			// 연결객체 저장용
	PreparedStatement ps = null; 	// SQL 객체
	ResultSet rs = null;			// 실행결과 저장용
	
	try {
		Class.forName( DRV );								// 1.
		conn = DriverManager.getConnection(URL, USR, PWD);	// 2.
		ps = conn.prepareStatement( insertSQL );			// 3.
		int cnt = ps.executeUpdate();						// 4.
		System.out.println( cnt + " 건의 데이터 입력" );
		
		ps.close();		// 또다른 SQL 문 작성하기 위해
						// 기존 ps 객체 제거
		ps = conn.prepareStatement( selectSQL );
		rs = ps.executeQuery();
		
		// ResultSet 에서 결과를 레코드 단위로 꺼내
		// 차례대로 출력
		while( rs.next() ) {								// 5.
															// ResultSet 에서 읽어올 레코드가 있으면
			System.out.println( rs.getInt( 1 )); 			// 첫번째 필드 출력
			System.out.println( rs.getString( "name" ) );	// 필드명으로 출력
		}
	} catch (Exception ex ) {
		ex.printStackTrace();
	} finally {
		 													// 6.
		// JDBC 작업이 끝난 후 메모리에서 객체 제거
		if( rs != null )
			try {
				rs.close();
			} catch (SQLException e) {
			}
		if( ps != null )
			try {
				ps.close();
			} catch (SQLException e) {
			}
		if( conn != null )
			try {
				conn.close();
			} catch (SQLException e) {
			}
	}
		
	
	
	} // main

} //class
